unit CondicaoPagamentoDM;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ZDataset, ZSqlUpdate, ZSequence, MainDM, DB, QueryConditions;

type

  { TCondicaoPagamentoData }

  TCondicaoPagamentoData = class(TMainDataModule)
    CondicaoPagamentoDatasource: TDatasource;
    CondicaoPagamentoZQuery: TZQuery;
    CondicaoPagamentoZQuerydesc_condicao_pagamento: TStringField;
    CondicaoPagamentoZQueryid_condicao_pagamento: TLargeintField;
    CondicaoPagamentoZSequence: TZSequence;
    CondicaoPagamentoZUpdate: TZUpdateSQL;
    CondPagParcelaDatasource: TDatasource;
    CondPagParcelaZQuery: TZQuery;
    CondPagParcelaZQuerydias: TLongintField;
    CondPagParcelaZQueryid_condicao_pagamento: TLargeintField;
    CondPagParcelaZQueryparcela: TLargeintField;
    CondPagParcelaZQueryporcentagem: TFloatField;
    CondPagParcelaZUpdate: TZUpdateSQL;
    AuxiliarZQuery: TZQuery;
    procedure DataModuleCreate(Sender: TObject);
    /// Abre o DataSet
    procedure OpenDataSet(); override;
    /// Fecha o DataSet
    procedure CloseDataSet(); override;
    /// Realiza busca
    /// @param(Condicoes são as condições para a busca)
    /// @param(Tabela é a tabela no banco de dados)
    procedure Search(Condicoes: TQueryConditions; Tabela: string); override;
    function VerificaTotalPorcentagem(IDCondicaoPagamento: string): boolean;
    procedure RemoveParcelas(IDCondicaoPagamento: string);
    procedure LimpaParcelas();
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  CondicaoPagamentoData: TCondicaoPagamentoData;

implementation

uses ConnectionDM;

{ TCondicaoPagamentoData }

procedure TCondicaoPagamentoData.DataModuleCreate(Sender: TObject);
begin
  MainDataSet := CondicaoPagamentoZQuery;
end;


procedure TCondicaoPagamentoData.OpenDataSet;
begin
  ConnectionData.EmptyQuery(CondicaoPagamentoZQuery, 'condicao_pagamento');
  CondPagParcelaZQuery.Open;
end;

procedure TCondicaoPagamentoData.CloseDataSet;
begin
  CondicaoPagamentoZQuery.Close();
  CondPagParcelaZQuery.Close();
end;

procedure TCondicaoPagamentoData.Search(Condicoes: TQueryConditions; Tabela: string);
begin
  ConnectionData.OpenQueryConditions(CondicaoPagamentoZQuery, Tabela, Condicoes);
end;

function TCondicaoPagamentoData.VerificaTotalPorcentagem(
  IDCondicaoPagamento: string): boolean;
var
  Total: string;
begin
  with AuxiliarZQuery do
  begin
    Close();
    SQL.Clear();
    SQL.Add('Select sum(porcentagem)as porcentagem From condicao_pagamento_parcela');
    SQL.Add('where id_condicao_pagamento =:id_condicao_pagamento');
    ParamByName('id_condicao_pagamento').AsString := IDCondicaoPagamento;
    Open();
    if RecordCount > 0 then
    begin
      Total := FieldByName('porcentagem').AsString;
      if Total = '100' then
      begin
        Result := True;
      end
      else
      begin
        Result := False;
      end;
    end
    else
    begin
      Result := False;
    end;
  end;
end;

procedure TCondicaoPagamentoData.RemoveParcelas(IDCondicaoPagamento: string);
var
  I: integer;
begin
  I := CondPagParcelaZQuery.RecordCount;
  if (I > 0) then
  begin
    with AuxiliarZQuery do
    begin
      Close();
      SQL.Clear();
      SQL.Add('DELETE From condicao_pagamento_parcela');
      SQL.Add('where id_condicao_pagamento =:id_condicao_pagamento');
      ParamByName('id_condicao_pagamento').AsString := IDCondicaoPagamento;
      Open();
      ExecSQL();
    end;
  end;
end;

procedure TCondicaoPagamentoData.LimpaParcelas;
begin
  with CondPagParcelaZQuery do begin
      Close();
      SQL.Clear();
      SQL.Add('SELECT * From condicao_pagamento_parcela');
      SQL.Add('limit 0');
      Open();

  end;
end;

initialization
  {$I condicaopagamentodm.lrs}

end.
